import request from '@/config/axios';
import {UnwrapRef} from "vue";

// 地图配置基础信息
export interface MapConfig {
  id: string;
  name: string;
  description?: string;
  provinceCode: string;
  cityCode: string;
  districtCode?: string;
  centerLng: number;
  centerLat: number;
  zoomLevel: number;
  createdAt: string;
  updatedAt?: string;
}

// 地图配置主 VO
export interface MapConfigVO {
  id: string // 配置ID（UUID）
  name: string // 配置名称
  description: string // 配置描述
  provinceCode: string // 省份编码（参考国家标准GB/T 2260）
  cityCode: string // 城市编码
  districtCode: string // 区县编码
  centerLng: number // 地图中心经度（范围：-180~180）
  centerLat: number // 地图中心纬度（范围：-90~90）
  zoomLevel: number // 缩放级别（范围：1~20）
  isDefault: number // 是否默认配置：0-否，1-是
  createdBy: string // 创建人ID
  createdAt: Date // 创建时间
  updatedBy: string // 更新人ID
  updatedAt: Date // 更新时间
}

// 地图配置主 API
export const MapConfigApi = {
  // 查询地图配置主分页
  getMapConfigPage: async (params: any) => {
    return await request.get({url: `/member/map-config/page`, params})
  },

  // 查询地图配置主详情
  getMapConfig: async (id: number) => {
    return await request.get({url: `/member/map-config/get?id=` + id})
  },

  // 新增地图配置主
  createMapConfig: async (data: UnwrapRef<{
    zoomLevel: number;
    centerLng: number;
    isDefault: number;
    districtCode: string;
    provinceCode: string;
    cityCode: string;
    name: string;
    description: string;
    id: string;
    centerLat: number
  }>) => {
    return await request.post({url: `/member/map-config/create`, data})
  },

  // 修改地图配置主
  updateMapConfig: async (data: UnwrapRef<{
    zoomLevel: number;
    centerLng: number;
    isDefault: number;
    districtCode: string;
    provinceCode: string;
    cityCode: string;
    name: string;
    description: string;
    id: string;
    centerLat: number
  }>) => {
    return await request.put({url: `/member/map-config/update`, data})
  },

// 补充完整的API方法，包含所有必要字段
  createGatherConfig: async (data: UnwrapRef<{
    id: string;
    name: string;
    description: string;
    startTime: string;
    endTime: string;
    distance?: number;
    interval?: string;
    warnType: number;
  }>) => {
    return await request.post({url: `/member/map-config/create`, data})
  },

  updateGatherConfig: async (data: UnwrapRef<{
    id: string;
    name: string;
    description: string;
    startTime: string;
    endTime: string;
    distance?: number;
    interval?: string;
    warnType: number;
  }>) => {
    return await request.put({url: `/member/map-config/update`, data})
  },

  // 补充完整的API方法，包含所有必要字段
  createInOutHzConfig: async (data: UnwrapRef<{
    id: string;
    name: string;
    keywords: string;
    warnType: number;
  }>) => {
    return await request.post({url: `/member/map-config/create`, data})
  },

  updateInOutHzConfig: async (data: UnwrapRef<{
    id: string;
    name: string;
    keywords: string;
    warnType: number;
  }>) => {
    return await request.put({url: `/member/map-config/update`, data})
  },

  // 删除地图配置主
  deleteMapConfig: async (id: string) => {
    return await request.delete({url: `/member/map-config/delete?id=` + id})
  },

  // 导出地图配置主 Excel
  exportMapConfig: async (params) => {
    return await request.download({url: `/member/map-config/export-excel`, params})
  }
}

// 地图多边形信息 VO
export interface MapPolygonVO {
  id: string // 多边形ID（UUID）
  configId: string // 关联配置ID（关联member_map_config.id）
  name: string // 多边形名称
  strokeColor: string // 描边颜色（16进制色值）
  strokeWeight: number // 描边宽度（单位：像素，范围：1~20）
  fillColor: string // 填充颜色（16进制色值）
  fillOpacity: number // 填充透明度（范围：0.00~1.00）
  zIndex: number // 层级（值越大越靠上，范围：1~100）
  sortOrder: number // 排序（升序排列）
  area: number // 多边形面积（单位：平方米，自动计算）
  pointCount: number // 顶点数量（自动计算）
  createdBy: string // 创建人ID
  createdAt: Date // 创建时间
  updatedBy: string // 更新人ID
  updatedAt: Date // 更新时间
}

// 地图多边形信息 API
export const MapPolygonApi = {
  // 创建多边形
  createMapPolygon: async (data: any) => {
    return await request.post({url: '/member/map-polygon/create', data})
  },
  // 更新多边形
  updateMapPolygon: async (data: any) => {
    return await request.put({url: '/member/map-polygon/update', data})
  },
  // 根据配置ID查询多边形（含顶点）
  getPolygonsByConfigId: async (configId: string) => {
    return await request.get({url: `/member/map-polygon/get?id=${configId}`})
  },
  // 查询地图多边形信息分页
  getMapPolygonPage: async (params: any) => {
    return await request.get({url: `/member/map-polygon/page`, params})
  },

  // 查询地图多边形信息详情
  getMapPolygon: async (id: number) => {
    return await request.get({url: `/member/map-polygon/get?id=` + id})
  },

  // 删除地图多边形信息
  deleteMapPolygon: async (id: string) => {
    return await request.delete({url: `/member/map-polygon/delete?id=` + id})
  }
}

// 点-in-多边形判断API
export const PointInPolygonApi = {
  judge: async (data: any) => {
    return await request.post({url: '/member/map-polygon/judge', data})
  }
}
